<?php

namespace App\Http\Controllers\Landscaping;

use Illuminate\Http\Request;
use Illuminate\Database\QueryException;
use App\Http\Controllers\Controller;
use App\Http\Controllers\ApiController;
use App\Models\SystemManagement\Post;
use App\Models\Landscaping\ParkJob;
use App\Models\Landscaping\ParkProject;
use App\Models\Landscaping\ParkProjectPost;

/**
 * @group 基础信息管理->绿化->园林工工种工作量预设管理
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */

class ParkJobController extends ApiController
{
    /**
     * 园林工工种工作量查看列表
     *
     * @queryParam project_id int 项目ID 外键 项目表
     * @queryParam post_id int 员工ID 外键 岗位表
     * @queryParam job_product string 项目
     * @queryParam job_areas string 任务量
     * @queryParam job_content text 作业内容
     * @queryParam job_time string 作业时间
     * @queryParam job_remark string 备注
     * @queryParam name string 岗位级别名称
     * @queryParam project_name string 项目名称
     * @queryParam project_remark string 项目备注
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $per_page = $request->input('per_page',10);

        //查询工作量表以及post员工关联表
        $data = ParkProject::with(['project_post'=>function($query) {
                    $query->select('id','name');
                    $query->whereHas('job',function($query) {
                        $query->select('job_areas');
                    });
                    $query->with('job');
                }])->paginate($per_page);

        return response()->json(encodeMsg($data,200));
    }

    /**
     * 项目添加
     *
     * @queryParam project_name string 项目名称
     * @queryParam project_remark string 项目备注
     *
     * @bodyParam project_name string 项目名称
     * @bodyParam project_remark string 项目备注
     *
     * @return \Illuminate\Http\Response
     */
    public function createProject(Request $request)
    {
        $parkProject = new ParkProject;
        try {
            $data = $parkProject::create($request->only('project_name','project_remark'));
            return response()->json($data,201);
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '项目添加失败!'],400));
        }
    }

    /**
     * 工种工作量添加
     *
     * @bodyParam project_id int 项目ID 外键 项目表
     * @bodyParam post_id int 员工ID 外键 岗位表
     * @bodyParam job_areas string 任务量
     * @bodyParam job_content text 作业内容
     * @bodyParam job_time string 作业时间
     * @bodyParam job_remark string 备注
     * @bodyParam name string 岗位级别名称
     *
     * @queryParam project_id int 项目ID 外键 项目表
     * @queryParam post_id int 员工ID 外键 岗位表
     * @queryParam job_product string 项目
     * @queryParam job_areas string 任务量
     * @queryParam job_content text 作业内容
     * @queryParam job_time string 作业时间
     * @queryParam job_remark string 备注
     * @queryParam name string 岗位级别名称
     * @queryParam project_name string 项目名称
     * @queryParam project_remark string 项目备注
     *
     * @return \Illuminate\Http\Response
     */
    public function createJob(Request $request)
    {
        $parkJob = new ParkJob;
        $data = array();
        try {
            // $parkJob::create($request->only('project_id','job_areas','job_content','job_remark','job_time'));
            $data = $parkJob::create($request->all());
            return response()->json(encodeMsg($data,201));
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '工种工作量添加失败!'],400));
        }
    }

    /**
     * 工效表添加
     *
     * @bodyParam project_id int 项目ID
     * @bodyParam post_id int 员工ID
     *
     * @queryParam project_id int 项目ID 外键 项目表
     * @queryParam post_id int 员工ID 外键 员工表
     *
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //项目添加
        $project_id = $request->input('project_id');
        //工种工作量添加
        $post_id = $request->input('post_id');
        $postIds = explode(',', $post_id);

        $parkProjectPost = new ParkProjectPost;

        foreach ($postIds as $id) {
            $parkProjectPost->project_id = $project_id;
            $parkProjectPost->post_id = $id;
            $parkProjectPost->save();
        }
        return response()->json(encodeMsg(['message' => '该项目工效数据添加成功!'],400));

    }

    /**
     * 查看园林工工种工作量
     *
     * @bodyParam id int 项目ID
     *
     * @queryParam project_id int 项目ID 外键 项目表
     * @queryParam post_id int 员工ID 外键 岗位表
     * @queryParam job_product string 项目
     * @queryParam job_areas string 任务量
     * @queryParam job_content text 作业内容
     * @queryParam job_time string 作业时间
     * @queryParam job_remark string 备注
     * @queryParam name string 岗位级别名称
     * @queryParam project_name string 项目名称
     * @queryParam project_remark string 项目备注
     *
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $data = ParkProject::with(['project_post'=>function($query) {
                    $query->select('id','name');
                    $query->whereHas('job',function($query) {
                        $query->select('job_areas');
                    });
                    $query->with('job');
                }])->where('id',$id)->first();
        if($data == []) {
            return response()->json(encodeMsg(["message" => "没有该工种工作量信息!"], 404));
        } else {
            return response()->json(encodeMsg($data,200));
        }
    }

    /**
     * 修改园林工工种工作量
     *
     * @bodyParam id int required 工种工作量ID
     *
     * @queryParam project_id int 项目ID 外键 项目表
     * @queryParam post_id int 员工ID 外键 岗位表
     * @queryParam job_product string 项目
     * @queryParam job_areas string 任务量
     * @queryParam job_content text 作业内容
     * @queryParam job_time string 作业时间
     * @queryParam job_remark string 备注
     * @queryParam name string 岗位级别名称
     * @queryParam project_name string 项目名称
     * @queryParam project_remark string 项目备注
     *
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $parkJob = ParkJob::find($id);
        if($parkJob == []) {
            return response()->json(encodeMsg(["message" => "没有该工种工作量信息!"], 404));
        }
        try {
            $parkJob->update($request->all());
            return $this->success($parkJob,200);
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '工种工作量修改失败!'],400));
        }
    }

    /**
     * 删除园林工工种工作量
     *
     * @bodyParam id int required  工种工作量ID
     * @response 204 {
     *   "message": "工种工作量删除成功"
     * }
     *
     *
     * @response 404 {
     *  "message": "没有该工种工作量信息"
     * }
     */
    public function destroy($id)
    {
        $parkJob = ParkJob::find($id);
        if($parkJob == []) {
            return response()->json(encodeMsg(["message" => "没有该工种工作量信息!"], 404));
        }
        if($parkJob->delete()) {
            return response()->json(encodeMsg(["message" => "工种工作量删除成功!"], 204));
        } else {
            return response()->json(encodeMsg(["message" => "工种工作量删除失败!"], 400));
        }
    }

    /**
     * 批量删除园林工工种工作量
     *
     * @bodyParam  ids int required  id集合字符串[格式：ids=1,2,3]
     * @response 204 {
     *   "message": "工种工作量删除成功"
     * }
     *
     *
     */
    public function delete($ids)
    {
        $listId = explode(',', $ids);
        ParkJob::whereIn('id',$listId)->delete();
        return response()->json(encodeMsg(["message" => "工种工作量删除成功!"], 204));
    }
}
